/////////////////////////////////////////////////////////////////////////
//
// Amuse Engine - graphics/renderer/renderstates
// Copyright (c) 2015.  All Rights Reserved
//
// File:		AERenderStates.h
// Author:		Gianluca Belardelli
// Date:		27/07/2015
//
/////////////////////////////////////////////////////////////////////////
#ifndef _AERENDERSTATES_H_
#define _AERENDERSTATES_H_

/// \brief
///   Class with static helper functions to access and modify Vision's internal shadowed render
///   state of the graphics API.
class AERenderStates
{
// Methods
public:
	/** @name Set Group States */
	/// @{
	/// \brief Sets a new rasterizer group state. Early outs when the hash key 
	/// is identical to the current state's hash key.
	AE_DLLIMPEXP static void SetRasterizerState( const AEStateGroupRasterizer &refState );

	/// @}
	/** @name Access Current States */
	/// @{
	/// \brief Returns the pointer to the engine's current rasterizer state.
	/// The return value points to a copy of the state set by SetRasterizerState, 
	/// so their pointer values will not be identical.
	AE_DLLIMPEXP static const AEStateGroupRasterizer *GetRasterizerState( void );

	/// @}
	/** @name Default States */
	/// @{
	/// \brief Returns the pointer to an instance of a rasterizer group that 
	/// represents the default state.
	AE_DLLIMPEXP static const AEStateGroupRasterizer *GetRasterizerDefaultState( void );

	/// @}
	/** @name Predefined State Groups */
	/// @{
	/// \brief
	///   Returns an instance of a rasterizer group state determined by the enum AERasterizerStyle.
	AE_DLLIMPEXP static const AEStateGroupRasterizer *GetRasterizerStateGroup( AERasterizerStyle rsRtate );
};

#endif // _AERENDERSTATES_H_
